#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
    int f=0,t=0;
    char c=getchar();
    while(!isdigit(c)) t|=(c=='-'),c=getchar();
    while(isdigit(c)) f=(f<<3)+(f<<1)+c-48,c=getchar();
    return t?-f:f;
}
void write(int x) {
    if(x<0) putchar('-'),x=-x;
    if(x>9) write(x/10);
    putchar('0'+x%10);
}
const int mod=998244353;
vector<int>s[200005];
int a[200005],b[200005],k,ans[200005];
bool pd[10][10];int vis[10];
int jl[10],pd1[10];
void dfs1(int p,int fa,int id){
	vis[p]=id;
	for(int i=0;i<s[p].size();i++){
		int y=s[p][i];
		if(vis[y]||pd[p][y]==1) continue;
		dfs1(y,p,id);
	}
}
void dfs(int p,int n){
	if(p==n){
		for(int i=1;i<=n;i++)for(int j=1;j<=n;j++) pd1[i]=0,pd[i][j]=0,vis[i]=0;
		for(int i=1;i<n;i++){if(jl[i]){pd[a[i]][b[i]]=1;pd[b[i]][a[i]]=1;}}
		int cnt=0;
		for(int i=1;i<=n;i++){
			if(vis[i]==0){
				cnt++;
				dfs1(i,0,cnt);
			}
		}
		int f=1;vis[n+1]=-1;
		for(int i=2;i<=n+1;i++){
			if(vis[i]!=vis[i-1]){
				pd1[vis[i-1]]++;
				if(pd1[vis[i-1]]>1) f=0;
			}
		}
		if(f==1&&cnt<=k) ans[cnt]++,ans[cnt]%=mod;
		return;
	}
	jl[p]=1;dfs(p+1,n),jl[p]=0,dfs(p+1,n);
}
int ksm(int x,int y){
	int ret=1;
	while(y){
		if(y%2==1) ret=(ret*x)%mod;
		y/=2;x=(x*x)%mod;
	}
	return ret;
}
int pw[200005],ny[200005];
signed main(){
	freopen("soft.in","r",stdin);
	freopen("soft.out","w",stdout);
	int n=read();k=read();
	for(int i=1;i<n;i++){
		int x=read(),y=read();
		s[x].push_back(y);
		s[y].push_back(x);
		a[i]=x,b[i]=y;
	}
	if(n<=5){
		dfs(1,n);
		for(int i=1;i<=k;i++) cout<<ans[i]<<'\n';
		return 0;
	}
	pw[0]=1;
	for(int i=1;i<=n;i++) pw[i]=(pw[i-1]*i)%mod;
	ny[n]=ksm(pw[n],mod-2);
	for(int i=n;i>=1;i--){
		ny[i-1]=(ny[i]*i)%mod;
	}
	for(int i=1;i<=n;i++){
		int sum=pw[n-1]*ny[n-i]%mod*ny[i-1]%mod;
		write(sum);cout<<'\n';
	}
	return 0;
}
